package com.zp.crm.Aspect.ServeAspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import com.zp.crm.util.targetLog.Log;
@Component
@Aspect
public class ServeAspect {
	/** 
     * try{ 
     *      @Before前置通知 
     *      method.invoke(); 
     *      @AfterRunning返回通知 
     * }catch(e){ 
     *      @AfterThrowing：异常通知， 
     * } 
     * @After 
     * 
     * 告诉Spring这些放在都在那个方法的哪个位置执行 
     * 1）、告诉位置 
     [1]@Before：前置通知，在方法执行之前执行 
     [2]@After：后置通知，在方法执行最终结束之后执行。 
        如果没异常 
     [3]@AfterRunning：返回通知，在方法返回结果之后执行 
     [4]@AfterThrowing：异常通知，在方法抛出异常之后执行 
  	
  	1、编写切入点表达式，来告诉spring是切入哪个方法的这个位置 
     */  
    @Before(value="execution(* com.zp.crm.service.ServeService.ServeService.*(..)) && @annotation(log)")  
    public void logStart(JoinPoint o,Log log){  
    System.out.println("AOP日志，方法开始");  
    }  
      
    @After(value="execution(* com.zp.crm.service.ServeService.ServeService.*(..)) && @annotation(log)")  
    public void logEnd(JoinPoint o,Log log){  
    System.out.println("AOP日志，方法最终结束");  
    }   
    @AfterThrowing(value="execution(* com.zp.crm.service.ServeService.ServeService.*(..)) && @annotation(log)")  
    public void logException(JoinPoint o,Log log){  
    System.out.println("AOP日志，方法出现异常");  
    }   
    @AfterReturning(value="execution(* com.zp.crm.service.ServeService.ServeService.*(..)) && @annotation(log)")  
    public void logReturn(JoinPoint o,Log log){  
    System.out.println("AOP日志，方法正常执行");  
    } 
}
